import axios, { type AxiosInstance, type AxiosRequestConfig } from 'axios'

// 复用的 Axios 实例
const instance: AxiosInstance = axios.create({
  baseURL: import.meta.env.VITE_API_BASE_URL,
  timeout: 5000,
})

// 请求拦截器
instance.interceptors.request.use(
  (config) => {
    return config
  },
  (error) => {
    return Promise.reject(error)
  },
)

// 响应拦截器（统一返回 data）
instance.interceptors.response.use(
  (response) => {
    return response.data
  },
  (error) => {
    return Promise.reject(error)
  },
)

// Orval mutator 期望的签名：axiosInstance<T>(config) => Promise<T>
export const axiosInstance = async <T = unknown>(config: AxiosRequestConfig): Promise<T> => {
  const response = await instance.request<T>(config)
  // 上面的响应拦截器已将返回值转为 data，这里为了类型安全再断言一次
  return response as unknown as T
}
